package cn.rkylin.oms.base.refundReasonType.utils.apprhandler.impl;

import java.util.HashMap;
import java.util.Map;

import org.apache.commons.lang.StringUtils;

import com.alibaba.fastjson.JSONObject;

import cn.rkylin.oms.aftersale.sysrefund.vo.SysRefundVO;
import cn.rkylin.oms.base.refundReasonType.domain.RdfundReasonType;
import cn.rkylin.oms.base.refundReasonType.utils.apprhandler.ApprHandler;

/**
 * 类名:IsApprSetHandler <br/>
 * 作用: 审核功能是否开启 <br/>
 * 创建原因: 校验审核功能是否开启. <br/>
 * 创建时间: 2017年12月11日 下午6:46:08 <br/>
 * 
 * @author zhanghao
 * @version v1.0
 */
public class IsApprSetHandler extends ApprHandler {

    /**
     * 校验审核功能是否开启.
     * 
     * @see cn.rkylin.oms.base.refundReasonType.utils.apprhandler.ApprHandler#getRuleContent()
     */
    @Override
    protected String getRuleContent() {
        return StringUtils.EMPTY;
    }

    /**
     * 校验审核功能是否已经设置，如果已经设置，则继续校验；如果没有设置，则停止继续校验.无论设置与否，都是合法的。
     * 
     * @see cn.rkylin.oms.base.refundReasonType.utils.apprhandler.ApprHandler#isValid(cn.rkylin.oms.aftersale.sysrefund.vo.SysRefundVO)
     */
    @Override
    protected boolean isValid(SysRefundVO sysRefundVO) throws Exception {
        boolean returnValue = true;
        JSONObject paramObject = getContextObj().getJSONObject("param");
        // 获取系统审核原因对象
        Map<String, Object> params = new HashMap<String, Object>();
        params.put("refundReasonId", sysRefundVO.getRefundReasonId());
        RdfundReasonType reasonType = rdfundReasonTypeService.getRdfundReasonTypeInfo(params);
        if (reasonType == null || StringUtils.isEmpty(reasonType.getApprRule()) || 0 == Integer.valueOf(reasonType.getApprRule())) {
            String result = Integer.toBinaryString(2);
            if (7 - result.length() > 0) {
                for (int i = 0, j = 7 - result.length(); i < j; i++) {
                    result = "0" + result;
                }
            }

            // 如果没有设置，则应当仍然校验是否有退货异常，而不是不校验
            paramObject.put("apprRule", result);
            getContextObj().put("param", paramObject);
        } else {
            String result = Integer.toBinaryString(Integer.valueOf(reasonType.getApprRule()));
            if (7 - result.length() > 0) {
                for (int i = 0, j = 7 - result.length(); i < j; i++) {
                    result = "0" + result;
                }
            }
            paramObject.put("apprRule", result);
            paramObject.put("isForceAppr", reasonType.getIsForceAppr());
            getContextObj().put("param", paramObject);
        }
        return returnValue;
    }

    /**
     * 校验是否验证此原因.返回空数组则一定会校验
     * 
     * @see cn.rkylin.oms.base.refundReasonType.utils.apprhandler.ApprHandler#getRuleCheckArray()
     */
    @Override
    protected int[] getRuleCheckArray() {
        return new int[0];
    }

}
